//package com.xhwl.data.listenter;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.xhwl.common.pojo.cent.sdata.*;
//import com.xhwl.data.dao.IEnterpriseDao;
//import com.xhwl.data.dao.IPermissionDao;
//import com.xhwl.data.dao.IProjectDao;
//import com.xhwl.data.dao.IRoleDao;
//import com.xhwl.data.service.IEnterprisePermissionService;
//import com.xhwl.data.service.IProjectPermissionService;
//import com.xhwl.data.service.IRolePermissionService;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.ApplicationArguments;
//import org.springframework.boot.ApplicationRunner;
//import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils;
//
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * @Author JCccc
// * @Description 默认勾选菜单初始化 监听器
// * @Date 2021/09/16 9:27
// */
//@Component
//public class DefaultSelectMenuListener implements ApplicationRunner {
//    private static final Logger log = LoggerFactory.getLogger(DefaultSelectMenuListener.class);
//    @Autowired
//    IRoleDao roleDao;
//    @Autowired
//    IPermissionDao permissionDao;
//    @Autowired
//    IEnterpriseDao enterpriseDao;
//    @Autowired
//    IProjectDao projectDao;
//    @Autowired
//    IEnterprisePermissionService enterprisePermissionService;
//    @Autowired
//    IProjectPermissionService projectPermissionService;
//    @Autowired
//    IRolePermissionService rolePermissionService;
//
//    @Override
//    public void run(ApplicationArguments args) {
//        log.info("开始初始化默认企业、项目、角色勾选菜单初始化......");
//        QueryWrapper<Permission> defaultPermissionWrapper = new QueryWrapper<>();
//        defaultPermissionWrapper.select("id", "industry_id");
//        defaultPermissionWrapper.eq("default_select", 1);
//        defaultPermissionWrapper.eq("is_deleted", 0);
//        List<Permission> permissions = permissionDao.selectList(defaultPermissionWrapper);
//        if(CollectionUtils.isEmpty(permissions)){
//            log.info("暂无需初始化默认勾选菜单......");
//            return;
//        }
//        List<Integer> permissionIdAll = permissions.stream().map(Permission::getId).collect(Collectors.toList());
//
//        Map<Short, List<Integer>> permissionMap = new HashMap<>();
//        for (Permission permission : permissions) {
//            Integer id = permission.getId();
//            Short industryId = permission.getIndustryId();
//            if (null == permissionMap.get(industryId)) {
//                List<Integer> permissionIds = new ArrayList<>();
//                permissionIds.add(id);
//                permissionMap.put(industryId, permissionIds);
//            } else {
//                List<Integer> permissionIds = permissionMap.get(industryId);
//                permissionIds.add(id);
//                permissionMap.put(industryId, permissionIds);
//            }
//        }
//        QueryWrapper<Enterprise> enterpriseWrapper = new QueryWrapper<>();
//        enterpriseWrapper.select("id", "industry_id");
//        enterpriseWrapper.eq("is_deleted", 0);
//        List<Enterprise> enterprises = enterpriseDao.selectList(enterpriseWrapper);
//        Map<Short, List<Integer>> enterprisesMap = new HashMap<>();
//        for (Enterprise enterprise : enterprises) {
//            Integer id = enterprise.getId();
//            Short industryId = enterprise.getIndustryId();
//            if (null == enterprisesMap.get(industryId)) {
//                List<Integer> enterpriseIds = new ArrayList<>();
//                enterpriseIds.add(id);
//                enterprisesMap.put(industryId, enterpriseIds);
//            } else {
//                List<Integer> enterpriseIds = enterprisesMap.get(industryId);
//                enterpriseIds.add(id);
//                enterprisesMap.put(industryId, enterpriseIds);
//            }
//        }
//
//        QueryWrapper<Project> projectWrapper = new QueryWrapper<>();
//        projectWrapper.select("id", "industry_id");
//        projectWrapper.eq("is_deleted", 0);
//        List<Project> projects = projectDao.selectList(projectWrapper);
//        Map<Short, List<Integer>> projectsMap = new HashMap<>();
//        for (Project project : projects) {
//            Integer id = project.getId();
//            Short industryId = project.getIndustryId();
//            if (null == projectsMap.get(industryId)) {
//                List<Integer> projectIds = new ArrayList<>();
//                projectIds.add(id);
//                projectsMap.put(industryId, projectIds);
//            } else {
//                List<Integer> projectIds = projectsMap.get(industryId);
//                projectIds.add(id);
//                projectsMap.put(industryId, projectIds);
//            }
//        }
//
//
//        QueryWrapper<Role> roleWrapper = new QueryWrapper<>();
//        roleWrapper.select("id", "industry_id");
//        roleWrapper.eq("is_deleted", 0);
//        List<Role> roles = roleDao.selectList(roleWrapper);
//        Map<Short, List<Integer>> rolesMap = new HashMap<>();
//        for (Role role : roles) {
//            Integer id = role.getId();
//            Short industryId = role.getIndustryId();
//            if (null == rolesMap.get(industryId)) {
//                List<Integer> roleIds = new ArrayList<>();
//                roleIds.add(id);
//                rolesMap.put(industryId, roleIds);
//            } else {
//                List<Integer> roleIds = rolesMap.get(industryId);
//                roleIds.add(id);
//                rolesMap.put(industryId, roleIds);
//            }
//        }
//        QueryWrapper<EnterprisePermission> deleteEntPermissionWrapper = new QueryWrapper<>();
//        deleteEntPermissionWrapper.in("permission_id", permissionIdAll);
//        enterprisePermissionService.remove(deleteEntPermissionWrapper);
//        QueryWrapper<ProjectPermission> deleteProPermissionWrapper = new QueryWrapper<>();
//        deleteProPermissionWrapper.in("permission_id", permissionIdAll);
//        projectPermissionService.remove(deleteProPermissionWrapper);
//        QueryWrapper<RolePermission> deleteRolePermissionWrapper = new QueryWrapper<>();
//        deleteRolePermissionWrapper.in("permission_id", permissionIdAll);
//        rolePermissionService.remove(deleteRolePermissionWrapper);
//        for (Short industryId : permissionMap.keySet()) {
//            List<Integer> permissionForIndustryId = permissionMap.get(industryId);
//            List<Integer> entList = enterprisesMap.get(industryId);
//            List<Integer> proList = projectsMap.get(industryId);
//            List<Integer> roleList = rolesMap.get(industryId);
//          //处理企业
//            for (Integer permissionId : permissionForIndustryId) {
//                List<EnterprisePermission> enterprisePermissions = new ArrayList<>();
//                for (Integer entId : entList) {
//                    EnterprisePermission enterprisePermission = new EnterprisePermission();
//                    enterprisePermission.setPermissionId(permissionId);
//                    enterprisePermission.setEnterpriseId(entId);
//                    enterprisePermissions.add(enterprisePermission);
//                }
//                enterprisePermissionService.saveBatch(enterprisePermissions);
//            }
//            //处理项目
//            for (Integer permissionId : permissionForIndustryId) {
//                List<ProjectPermission> projectPermissions = new ArrayList<>();
//                for (Integer proId : proList) {
//                    ProjectPermission projectPermission = new ProjectPermission();
//                    projectPermission.setPermissionId(permissionId);
//                    projectPermission.setProjectId(proId);
//                    projectPermissions.add(projectPermission);
//                }
//                projectPermissionService.saveBatch(projectPermissions);
//            }
//
//            //处理角色
//            for (Integer permissionId : permissionForIndustryId) {
//                List<RolePermission> rolePermissions = new ArrayList<>();
//                for (Integer roleId : roleList) {
//                    RolePermission rolePermission = new RolePermission();
//                    rolePermission.setPermissionId(permissionId);
//                    rolePermission.setRoleId(roleId);
//                    rolePermissions.add(rolePermission);
//                }
//                rolePermissionService.saveBatch(rolePermissions);
//            }
//        }
//        log.info("初始化默认企业、项目、角色勾选菜单初始化完毕......");
//    }
//
//
//}
